别有用心的Ts(关于ts的认识)

typescript 文档:<>

以下,一个不愿接受,没有接触,也不会使用ts 的 非专业人员 想法。
就是喜欢浪,代码已经手动规范。而且也不需要再编译

2020.7.26 星期日 17:13

什么

声明或定义 变量类型。
其实并没有拓展js语法,比如:接口,泛型,等。

本质

本质上,并不会成为一个新语言。除非直接编译成c或者二进制。

js 需要的语法,在ECMA 会慢慢完善。
ts 徒增一层编译,最后还是要转成js,编译效率还不错吗?。
虽然ECMA 也是经babel 转js,但ECMA 还是js的语法,bable只是兼容。

结果

java,c 等也需要编译成二进制 才可以被计算机识别。
ts 是编译成它原始的语言js,而非二进制。不如webassembly 等。

差别

js本是弱类型。ts 要转成强类型,

  1. 代码中变量类型(函数参数,返回)等是明确了,代码的语义是明确了。
    但是代码量却增加,有时候还需要提前定义/声明复杂的接口。

业务

js本是在浏览器环境直接执行的,不需要太多框框。
ts 写为强类型真的合适吗?

前端飞快发展,各种框架,应用场景 越来越丰富。

typescript 也想分一杯羹。觉得js 不如其他高级语言,比如java等没有类型声明,这些强迫者觉得不声明类型,这个语言就是低级语言,bug就会多。

难道用高级语言,声明了变量类型(也没有多高级)bug 就会减少吗?

在(前端)开发的基本背景下:开发时间短;迭代周期快;需求变化快;项目生命短;人员变换多;
即使在大公司,也不能确定他们的项目代码是符合开发标准的。
尽管后端的接口声明了返回的类型,但是经常是不确认的。一个空值,可能是null,undefined,[],{},0,’’(用不同的json 转换包,返回的不尽相同)。 前端仍然需要做许多判断:!= null,isArray, {}; 接口状态不是 数字,就是字符串(因为要对多个平台接口,每个接口规范不同,写的人的风格也不一样)。

这时候,根本不能明确定义一个 response 就是 Object 或者number。也有可能是null,或者字符串。
为了声明一个想要的变量类型,需要多兼容一下接口可能返回的所有未知的类型。

我见过的大多数后端接口,不会按照前端想要的格式返回:空对象就是不要返回null,或者了需要吞掉返回的字段,直接返回{}。(我们这接口就是这样的,你们前端自己判断/转一下吧,我这还有其他接口)

那些接受了强类型的人,非要把js 变成ts。这样可以解决什么问题呢?

如果不能完全发挥ts 的优势;或者使用不熟练,只会使项目越来越坨。

### 解决
js语言 相较其他语言是有许多问题。
每个语言都会有问题,但都是慢慢在变得完善。

注解是个好东西。
注释更是好东西。可以标注 数据类型,是否可选,变量含义,解释代码逻辑 等。
不用类型声明,用注释;或者变量赋值时的默认值,变量名,都可以很好的定义变量类型。

如果这点约定做不到,即使是强类型声明变量类型。也会写错,照样编译不过。
如果能做到,还需要强类型的限制,丢掉语言的灵活性吗。

如果大家都能照着约定/规范 开发就好了

类型声明

  1. 强制规范 语言。不同的开发人员,新手 不写错误的代码。
  2. 代码 可读性 更强。
  3. bug 更少??

但愿如此。
如果一个新手,看一个number类型;觉得他现在要添加一个string 类型,就会加一个类型声明上去。
再来一个人,觉得不好;也要扩展,最后可能 就是any。
大抵如此。都any 容易一些。如果只是单一的number 声明类型也不是很重要。

如果还有人想抽离一个接口出来,那他可能需要更新的地方不止一处了。

使用

如果你正在开发一个新的项目
而且这个项目会持续较长的时间,时间充裕,对稳定性要求比较高
成员间都能熟悉使用ts,如果有新人能够接受学习过程,并规范后续新人的开发
可以使用ts

有优点自是不必说的。
仍然要注意 规范和 优化。
因为本身就是做了一个规范;而且需要编译,项目大当然需要优化了。不可能不编译直接使用吧

后续

如果js 中真需要 强类型,它自会支持的。
也许可能是新的一种语言,有他自己的适用标准。
但觉不会是ts。

java 的出现,是因为c 复杂。
js 就简单多了,为什么要多加一层ts。徒增复杂,实际意义也不大。
ts 不比coffe script 强多少(只是坐上了js的快车;也没接触过coffee)
为什么会有一种ts 很有必要,和火的感觉呢?

是不是它别有用心呢?
搅乱js的市场。盘子这么大,好搅拌吗

一切把简单的东西 复杂化,都是作恶;如果它没有解决任何实际性问题,就是十恶不赦。
我们总结出的规律,原则/框架,法律 等,都是想要把问题简单化。

最后

强类型 确实 很好。
但在多数前端开发中,可能是鸡肋。不如弃之
学习成本/回报率低

个人非科班,开始学java 感觉约束性太强。
转向js,就喜欢 浪。

如果你有很好的开发习惯,自然会利用语法的灵活性。而不是肆意而为
而没有,强类型也救不了。只会越写越糟

19:18

knowledge is no pay,reward is kindness
0%